package cn.tedu.charging.order.amqp;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 封装rabbtimq 实现生产发送
 */
@Component
@Slf4j
public class AmqpProducer<T> {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 定义一个发送消息的方法
     * T msg: 业务消息 消息体数据
     * String destination: 交换机名 DELAY_BILL_EX
     * String routingKey: 路由key DELAY_BILL_ROUTING_KEY
     * return boolean 成功还是失败
     * 关于发送消息成功和失败 可以选择同步 可以选择异步
     */
    //重载方法 有的时候 发送消息交换机是fanout 无需携带路由
    public boolean sendDelay(T msg,String destination){
        return this.sendDelay(msg,destination,"");
    }
    public boolean sendDelay(T msg,String destination,String routingKey){
        try{
            rabbitTemplate.convertAndSend(destination,routingKey,msg);
        }catch (Exception e){
             log.error("向topic:{},发送消息:{} 失败",destination,msg);
             return false;
        }
        return true;
    }
}
